home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 1 Issue 2 / PDCD-1 - Issue 02.iso / _utilities / utilities / 004 / gstobject / fasttimer / Example / CLib (.txt) next >
RISC OS BBC BASIC V Source  |  1994-09-23  |  9KB  |  553 lines

  1.  -- BASIC Assembler to initialise with the Shared C Library
  2.  -- This program may freely be modified (or not) for use in your
  3.  -- own programs.
  4.  -- By George Taylor, george@tardis.ed.ac.uk
  5. _Assemble_CLib
  6. [ OPT pass%
  7. ; Call
  8. .CLib_start%
  9. .CLib_enter
  10. *; initialise with the Shared C Library
  11. 8; call 'main' (complete with command line arguments)
  12.   SWI     "OS_GetEnv"
  13.   MOV     r2,r1
  14.   ADR     r0,CLib_stubs%
  15. $  LDR     r1,CLib_workspace_ptr%
  16.   MVN     r3,#0
  17.   MOV     r4,#0
  18.   MVN     r5,#0
  19.   MOV     r6,#&40000
  20. ,  SWI     "SharedCLibrary_LibInitAPCS_R"
  21.   MOV     r4,r0
  22. (  ADR     r0,CLib_kernel_init_block%
  23.   MOV     r3,#0
  24.   B       _kernel_init
  25. .CLib_workspace_ptr%
  26.   EQUD    CLib_workspace%
  27. .CLib_c_init
  28.   MOV     r0,#1
  29. &)  STRB    r0,CLib_kernel_statics%+277
  30.   MOV     r0,sp
  31.   STMDB   sp !,{lr}
  32. )   ADR     r1,CLib_rts_block%
  33.   LDMIB   r1,{r1,r2}
  34.   BL      _clib_initialise
  35.   ADR     r0,CLib_c_run
  36.   LDMIA   sp !,{pc}^
  37. .CLib_c_run
  38.   STMFD   sp !,{lr}
  39. 1$  BL      _kernel_command_string
  40.   LDMFD   sp !,{lr}
  41.   LDR     r1,CLib_main%
  42.   B       _main
  43. .CLib_main%
  44.   EQUD    main
  45. .CLib_stubs%
  46.   EQUD    1
  47. ;"  EQUD    CLib_kernel_vectors%
  48. <&  EQUD    CLib_kernel_vectors_end%
  49. ="  EQUD    CLib_kernel_statics%
  50. >&  EQUD    CLib_kernel_statics_end%
  51.   EQUD    2
  52. @   EQUD    CLib_clib_vectors%
  53. A$  EQUD    CLib_clib_vectors_end%
  54. B   EQUD    CLib_clib_statics%
  55. C$  EQUD    CLib_clib_statics_end%
  56.   EQUD    -1
  57. .CLib_kernel_init_block%
  58.   EQUD    imagestart%
  59.   EQUD    CLib_rts_block%
  60. I!  EQUD    CLib_rts_block_end%
  61. .CLib_rts_block%
  62. L3  EQUD    CLib_rts_block_end% - CLib_rts_block%
  63.   EQUD    imagestart%
  64.   EQUD    CLib_start%
  65.   EQUD    CLib_c_str
  66.   EQUD    CLib_c_init
  67.   EQUD    0
  68.   EQUD    TrapHandler
  69. S!  EQUD    UncaughtTrapHandler
  70.   EQUD    EventHandler
  71. U#  EQUD    UnhandledEventHandler
  72. .CLib_rts_block_end%
  73. .CLib_c_str
  74.   EQUS    "C"
  75.   EQUB    0
  76.   ALIGN
  77. .CLib_kernel_statics%
  78.  I%=0 
  79.  &31C 
  80. O%!I%=0
  81. P%+=&31C
  82. O%+=&31C
  83. [ OPT pass%
  84. .CLib_kernel_statics_end%
  85. .CLib_clib_statics%
  86.  I%=0 
  87.  &B48 
  88. O%!I%=0
  89. P%+=&B48
  90. O%+=&B48
  91. [ OPT pass%
  92. .CLib_clib_statics_end%
  93. .CLib_kernel_vectors%
  94. ._kernel_init
  95. MOVS pc,R14
  96. ._kernel_exit
  97. MOVS pc,R14
  98. ._kernel_setreturncode
  99. MOVS pc,R14
  100. ._kernel_exittraphandler
  101. MOVS pc,R14
  102. ._kernel_unwind
  103. MOVS pc,R14
  104. ._kernel_procname
  105. MOVS pc,R14
  106. ._kernel_language
  107. MOVS pc,R14
  108. ._kernel_command_string
  109. MOVS pc,R14
  110. ._kernel_hostos
  111. MOVS pc,R14
  112. ._kernel_swi
  113. MOVS pc,R14
  114. ._kernel_osbyte
  115. MOVS pc,R14
  116. ._kernel_osrdch
  117. MOVS pc,R14
  118. ._kernel_oswrch
  119. MOVS pc,R14
  120. ._kernel_osbget
  121. MOVS pc,R14
  122. ._kernel_osbput
  123. MOVS pc,R14
  124. ._kernel_osgbpb
  125. MOVS pc,R14
  126. ._kernel_osword
  127. MOVS pc,R14
  128. ._kernel_osfind
  129. MOVS pc,R14
  130. ._kernel_osfile
  131. MOVS pc,R14
  132. ._kernel_osargs
  133. MOVS pc,R14
  134. ._kernel_oscli
  135. MOVS pc,R14
  136. ._kernel_last_oserror
  137. MOVS pc,R14
  138. ._kernel_system
  139. MOVS pc,R14
  140. ._kernel_getenv
  141. MOVS pc,R14
  142. ._kernel_setenv
  143. MOVS pc,R14
  144. ._kernel_register_allocs
  145. MOVS pc,R14
  146. ._kernel_alloc
  147. MOVS pc,R14
  148.  ._kernel_stkovf_split_0frame
  149. MOVS pc,R14
  150. ._kernel_stkovf_split
  151. MOVS pc,R14
  152. ._kernel_stkovf_copyargs
  153. MOVS pc,R14
  154. ._kernel_stkovf_copy0args
  155. MOVS pc,R14
  156. ._kernel_udiv
  157. MOVS pc,R14
  158. ._kernel_urem
  159. MOVS pc,R14
  160. ._kernel_udiv10
  161. MOVS pc,R14
  162. ._kernel_sdiv
  163. MOVS pc,R14
  164. ._kernel_srem
  165. MOVS pc,R14
  166. ._kernel_sdiv10
  167. MOVS pc,R14
  168. ._kernel_fpavailable
  169. MOVS pc,R14
  170. ._kernel_moduleinit
  171. MOVS pc,R14
  172. ._kernel_irqs_on
  173. MOVS pc,R14
  174. ._kernel_irqs_off
  175. MOVS pc,R14
  176. ._kernel_irqs_disabled
  177. MOVS pc,R14
  178. ._kernel_entermodule
  179. MOVS pc,R14
  180. ._kernel_escape_seen
  181. MOVS pc,R14
  182.  ._kernel_current_stack_chunk
  183. MOVS pc,R14
  184. ._kernel_swi_c
  185. MOVS pc,R14
  186.  ._kernel_register_slotextend
  187. MOVS pc,R14
  188. ._kernel_raise_error
  189. MOVS pc,R14
  190. .CLib_kernel_vectors_end%
  191. .CLib_clib_vectors%
  192. .TrapHandler
  193. MOVS pc,R14
  194. .UncaughtTrapHandler
  195. MOVS pc,R14
  196. .EventHandler
  197. MOVS pc,R14
  198. .UnhandledEventHandler
  199. MOVS pc,R14
  200. .x_stack_overflow
  201. MOVS pc,R14
  202. .x_stack_overflow_1
  203. MOVS pc,R14
  204. .x_udivide
  205. MOVS pc,R14
  206. .x_uremainder
  207. MOVS pc,R14
  208. .x_divide
  209. MOVS pc,R14
  210. .x_divtest
  211. MOVS pc,R14
  212. .x_remainder
  213. MOVS pc,R14
  214. .x_multiply
  215. MOVS pc,R14
  216. ._rd1chk
  217. MOVS pc,R14
  218. ._rd2chk
  219. MOVS pc,R14
  220. ._rd4chk
  221. MOVS pc,R14
  222. ._wr1chk
  223. MOVS pc,R14
  224. ._wr2chk
  225. MOVS pc,R14
  226. ._wr4chk
  227. MOVS pc,R14
  228. ._main
  229. MOVS pc,R14
  230. ._exit
  231. MOVS pc,R14
  232. ._clib_initialise
  233. MOVS pc,R14
  234. ._backtrace
  235. MOVS pc,R14
  236. ._count
  237. MOVS pc,R14
  238. ._count1
  239. MOVS pc,R14
  240. ._stfp
  241. MOVS pc,R14
  242. ._ldfp
  243. MOVS pc,R14
  244. ._printf
  245. MOVS pc,R14
  246. ._fprintf
  247. MOVS pc,R14
  248. ._sprintf
  249. MOVS pc,R14
  250. .clock
  251. MOVS pc,R14
  252. .difftime
  253. MOVS pc,R14
  254. .mktime
  255. MOVS pc,R14
  256.     .time
  257. MOVS pc,R14
  258. .asctime
  259. MOVS pc,R14
  260. .ctime
  261. MOVS pc,R14
  262. .gmtime
  263. MOVS pc,R14
  264. .localtime
  265. MOVS pc,R14
  266. .strftime
  267. MOVS pc,R14
  268. .memcpy
  269. MOVS pc,R14
  270. .memmove
  271. MOVS pc,R14
  272. .strcpy
  273. MOVS pc,R14
  274. .strncpy
  275. MOVS pc,R14
  276. .strcat
  277. MOVS pc,R14
  278. .strncat
  279. MOVS pc,R14
  280. .memcmp
  281. MOVS pc,R14
  282. .strcmp
  283. MOVS pc,R14
  284. .strncmp
  285. MOVS pc,R14
  286. .memchr
  287. MOVS pc,R14
  288. .strchr
  289. MOVS pc,R14
  290. .strcspn
  291. MOVS pc,R14
  292. .strpbrk
  293. MOVS pc,R14
  294. .strrchr
  295. MOVS pc,R14
  296. .strspn
  297. MOVS pc,R14
  298. .strstr
  299. MOVS pc,R14
  300. .strtok
  301. MOVS pc,R14
  302. .memset
  303. MOVS pc,R14
  304. .strerror
  305. MOVS pc,R14
  306. .strlen
  307. MOVS pc,R14
  308. I    .atof
  309. MOVS pc,R14
  310. K    .atoi
  311. MOVS pc,R14
  312. M    .atol
  313. MOVS pc,R14
  314. .strtod
  315. MOVS pc,R14
  316. .strtol
  317. MOVS pc,R14
  318. .strtoul
  319. MOVS pc,R14
  320. U    .rand
  321. MOVS pc,R14
  322. .srand
  323. MOVS pc,R14
  324. .calloc
  325. MOVS pc,R14
  326. [    .free
  327. MOVS pc,R14
  328. .malloc
  329. MOVS pc,R14
  330. .realloc
  331. MOVS pc,R14
  332. .abort
  333. MOVS pc,R14
  334. .atexit
  335. MOVS pc,R14
  336. e    .exit
  337. MOVS pc,R14
  338. .getenv
  339. MOVS pc,R14
  340. .system
  341. MOVS pc,R14
  342. .bsearch
  343. MOVS pc,R14
  344. .qsort
  345. MOVS pc,R14
  346. MOVS pc,R14
  347. MOVS pc,R14
  348. s    .labs
  349. MOVS pc,R14
  350. u    .ldiv
  351. MOVS pc,R14
  352. .remove
  353. MOVS pc,R14
  354. .rename
  355. MOVS pc,R14
  356. .tmpfile
  357. MOVS pc,R14
  358. .__old_tmpnam
  359. MOVS pc,R14
  360. .fclose
  361. MOVS pc,R14
  362. .fflush
  363. MOVS pc,R14
  364. .fopen
  365. MOVS pc,R14
  366. .freopen
  367. MOVS pc,R14
  368. .setbuf
  369. MOVS pc,R14
  370. .setvbuf
  371. MOVS pc,R14
  372. .printf
  373. MOVS pc,R14
  374. .fprintf
  375. MOVS pc,R14
  376. .sprintf
  377. MOVS pc,R14
  378. .scanf
  379. MOVS pc,R14
  380. .fscanf
  381. MOVS pc,R14
  382. .sscanf
  383. MOVS pc,R14
  384. .vprintf
  385. MOVS pc,R14
  386. .vfprintf
  387. MOVS pc,R14
  388. .vsprintf
  389. MOVS pc,R14
  390. ._vfprintf
  391. MOVS pc,R14
  392. .fgetc
  393. MOVS pc,R14
  394. .fgets
  395. MOVS pc,R14
  396. .fputc
  397. MOVS pc,R14
  398. .fputs
  399. MOVS pc,R14
  400. .__filbuf
  401. MOVS pc,R14
  402.     .getc
  403. MOVS pc,R14
  404. .getchar
  405. MOVS pc,R14
  406.     .gets
  407. MOVS pc,R14
  408. .__flsbuf
  409. MOVS pc,R14
  410.     .putc
  411. MOVS pc,R14
  412. .putchar
  413. MOVS pc,R14
  414.     .puts
  415. MOVS pc,R14
  416. .ungetc
  417. MOVS pc,R14
  418. .fread
  419. MOVS pc,R14
  420. .fwrite
  421. MOVS pc,R14
  422. .fgetpos
  423. MOVS pc,R14
  424. .fseek
  425. MOVS pc,R14
  426. .fsetpos
  427. MOVS pc,R14
  428. .ftell
  429. MOVS pc,R14
  430. .rewind
  431. MOVS pc,R14
  432. .clearerr
  433. MOVS pc,R14
  434.     .feof
  435. MOVS pc,R14
  436. .ferror
  437. MOVS pc,R14
  438. .perror
  439. MOVS pc,R14
  440. .__ignore_signal_handler
  441. MOVS pc,R14
  442. .__default_signal_handler
  443. MOVS pc,R14
  444. .__error_signal_marker
  445. MOVS pc,R14
  446. .signal
  447. MOVS pc,R14
  448. .raise
  449. MOVS pc,R14
  450. .setjmp
  451. MOVS pc,R14
  452. .longjmp
  453. MOVS pc,R14
  454.     .acos
  455. MOVS pc,R14
  456.     .asin
  457. MOVS pc,R14
  458.     .atan
  459. MOVS pc,R14
  460. .atan2
  461. MOVS pc,R14
  462. MOVS pc,R14
  463. MOVS pc,R14
  464. MOVS pc,R14
  465.     .cosh
  466. MOVS pc,R14
  467.     .sinh
  468. MOVS pc,R14
  469.     .tanh
  470. MOVS pc,R14
  471. MOVS pc,R14
  472. .frexp
  473. MOVS pc,R14
  474. .ldexp
  475. MOVS pc,R14
  476. MOVS pc,R14
  477. .log10
  478. MOVS pc,R14
  479.     .modf
  480. MOVS pc,R14
  481. MOVS pc,R14
  482.     .sqrt
  483. MOVS pc,R14
  484.     .ceil
  485. MOVS pc,R14
  486.     .fabs
  487. MOVS pc,R14
  488. .floor
  489. MOVS pc,R14
  490.     .fmod
  491. MOVS pc,R14
  492. .setlocale
  493. MOVS pc,R14
  494. .isalnum
  495. MOVS pc,R14
  496. .isalpha
  497. MOVS pc,R14
  498. .iscntrl
  499. MOVS pc,R14
  500. .isdigit
  501. MOVS pc,R14
  502. .isgraph
  503. MOVS pc,R14
  504. .islower
  505. MOVS pc,R14
  506. .isprint
  507. MOVS pc,R14
  508. .ispunct
  509. MOVS pc,R14
  510. .isspace
  511. MOVS pc,R14
  512. .isupper
  513. MOVS pc,R14
  514. .isxdigit
  515. MOVS pc,R14
  516. .tolower
  517. MOVS pc,R14
  518. .toupper
  519. MOVS pc,R14
  520. .__assert
  521. MOVS pc,R14
  522. ._memcpy
  523. MOVS pc,R14
  524. ._memset
  525. MOVS pc,R14
  526. .localeconv
  527. MOVS pc,R14
  528. .mblen
  529. MOVS pc,R14
  530. .mbtowc
  531. MOVS pc,R14
  532. .wctomb
  533. MOVS pc,R14
  534. .mbstowcs
  535. MOVS pc,R14
  536. .wcstombs
  537. MOVS pc,R14
  538. .strxfrm
  539. MOVS pc,R14
  540. .strcoll
  541. MOVS pc,R14
  542. ._clib_finalisemodule
  543. MOVS pc,R14
  544. ._clib_version
  545. MOVS pc,R14
  546. .Finalise
  547. MOVS pc,R14
  548. .tmpnam
  549. MOVS pc,R14
  550. .CLib_clib_vectors_end%
  551. E7; C workspace goes from here to top of memory space
  552. .CLib_workspace%
  553.